As computer software and the systems that run software increase in complexity, traditional techniques of monitoring or even understanding performance become inadequate. Engineers face an ever more difficult environment in which to diagnose problems, improve efficiency or correct errors. Present-day software frequently presents a combination of real-time constraints and limited access to code and data; it is no longer practical to isolate and execute small segments of code in order to detect and fix bugs.
Accordingly, experienced engineers have developed techniques for “instrumenting” complex systems to facilitate testing, comprehension and monitoring of operation. Instrumented software contains code that allows the engineer to see (e.g., by means of a display) critical aspects of software or system performance even as the system is running. For example, the instrumentation may display various graphical images, such as meters or scales that indicate the efficiency or quality of important performance parameters, offering insight into the sources of problems and possible solutions.
Software instrumentation techniques, whether applied to object oriented or conventional software, typically require access and modification to the source code and executable files. A non-developer of software, such as a purchaser or user of software (and especially of commercially developed software), does not typically have access to the source code files or other instrumentation tools effective for monitoring the software. The user may have access to parameter configuration files that affect and adjust the inner workings of the software. But in many cases the user does not understand enough about the inner workings of the software to make informed changes to the configuration files. Often, the user does not know whether configuration changes are even appropriate to address particular performance or behavioral problems.
The software developer may be unwilling or unable to provide attention to the concerns of the user. As a result, the user (and even technical specialists hired by the user) is typically unable to identify and measure the inner workings of the software to make informed decisions concerning appropriate remedies—e.g., whether reconfiguration or software modification is the correct solution to particular performance or behavioral problems. To address such software performance and behavioral problems, there is a need for tools that better enable the non-developers of software to identify and measure the performance and behavior of the inner workings of the software.